﻿/** 
 *   Juego: Logica de juego.
 *  
 *   @see Skynet Menu Ficha Tablero
 *   @author Eduardo Masia Roman
 */

/* --------------------------------------------------         
   Parte de Damas - EMR
   Versiones hasta la fecha:
   
   Num.   Fecha       Por / Cambios
   ---------------------------------------------------
   0.01  22-May-2009  Eduardo Masia
                      Versión inicial: Estructura.
   0.02  23-May-2009  Eduardo Masia
                      Creado miTablero y miPanelInfo.
                      Metodo Dibujar:
                        Llama a dibujar de Tablero y de PanelInfo.
         01-Jun-2009  Eduardo Masia
                      Creados jugadores y dibujados.
 
 ---------------------------------------------------- */

namespace Damas
{
    class Juego
    {
        private TableroImagen miTablero;
        private Jugador[] misJugadores;
        private PanelInfo miPanelInfo;

        private bool partidaTerminada;
        private bool esJugador1;

        private const byte NUMJUGADORES = 2;

        public Juego()
        {
            // TODO: Inicializar datos del juego

            partidaTerminada = false;


            misJugadores = new Jugador[NUMJUGADORES];
            esJugador1 = true;

            //Provisinal
            misJugadores[0] = new Humano(this, true);
            misJugadores[1] = new Humano(this, false);
        }


        public void Ejecutar()
        {
            miTablero = new TableroImagen();
            miPanelInfo = new PanelInfo();

            buclePrincipal();
        }


        private void buclePrincipal()
        {
            do
            {
                dibujarPantalla();
                controlarTeclas();
                controlRaton();
                siguienteFotograma();

                Hardware.Pausa(40);
            } while (!partidaTerminada);
        }


        private void controlarTeclas()
        {
            //TODO: Controlar la pulsacion de teclas
            if (Hardware.TeclaPulsada(Hardware.TECLA_ESC))
            {
                partidaTerminada = true;
            }
        }


        private void controlRaton()
        {
            if (Hardware.RatonPulsado())
            {
                if (esJugador1)
                {
                    //if (misJugadores[0].GetType() == Humano)
                    {
                        misJugadores[0].Mover(Hardware.GetXRaton(), Hardware.GetYRaton());
                    }
                }
                else
                {
                    //if (misJugadores[1].GetType() == Humano)
                    {
                        misJugadores[1].Mover(Hardware.GetXRaton(), Hardware.GetYRaton());
                    }
                }
            }
        }


        private void dibujarPantalla()
        {
            //TODO: Dibujar los diferentes elementos
            miTablero.Dibujar();

            foreach (Jugador j in misJugadores)
                j.Dibujar();

            miPanelInfo.Dibujar();

            Hardware.VisualizarOculta();
        }


        private void siguienteFotograma()
        {
            //TODO: Por completar, necesario¿?
        }
    }
}
